JavaScriptã®éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ãæ¢æ±ããå¹ççãªéåæã¹ããªãŒã åŠçãå®çŸããŸããããã¢ãã³ãªWebã¢ããªã±ãŒã·ã§ã³ã®ããã®ãæè»ã§ã¹ã±ãŒã©ãã«ãªããŒã¿åŠçãã§ãŒã³ã®æ§ç¯æ¹æ³ãåŠã³ãŸãã
JavaScriptéåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ïŒã¹ããªãŒã åŠçãã§ãŒã³ããã¹ã¿ãŒãã
çŸä»£ã®Webéçºã«ãããŠãéåæããŒã¿ã¹ããªãŒã ãå¹ççã«åŠçããããšã¯éåžžã«éèŠã§ããJavaScriptã®éåæãžã§ãã¬ãŒã¿ãŒãšéåæã€ãã¬ãŒã¿ãŒã¯ããã€ãã©ã€ã³ã®åãšçµã¿åãããããšã§ãããŒã¿ã¹ããªãŒã ãéåæã«åŠçããããã®æŽç·Žããããœãªã¥ãŒã·ã§ã³ãæäŸããŸãããã®èšäºã§ã¯ãéåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã®æŠå¿µãæãäžããæè»ã§ã¹ã±ãŒã©ãã«ãªããŒã¿åŠçãã§ãŒã³ãæ§ç¯ããããã®å æ¬çãªã¬ã€ããæäŸããŸãã
éåæãžã§ãã¬ãŒã¿ãŒãšéåæã€ãã¬ãŒã¿ãŒãšã¯ïŒ
ãã€ãã©ã€ã³ã«é£ã³èŸŒãåã«ããã®æ§æèŠçŽ ã§ããéåæãžã§ãã¬ãŒã¿ãŒãšéåæã€ãã¬ãŒã¿ãŒã«ã€ããŠçè§£ããŸãããã
éåæãžã§ãã¬ãŒã¿ãŒ
éåæãžã§ãã¬ãŒã¿ãŒã¯ãAsync Generatorãªããžã§ã¯ããè¿ã颿°ã§ãããã®ãªããžã§ã¯ãã¯ãéåæã€ãã¬ãŒã¿ãŒãããã³ã«ã«æºæ ããŠããŸããéåæãžã§ãã¬ãŒã¿ãŒã䜿çšãããšãéåæã«å€ãyieldã§ãããããæéãšãšãã«å°çããããŒã¿ã¹ããªãŒã ã®åŠçã«æé©ã§ãã
åºæ¬çãªäŸã以äžã«ç€ºããŸãïŒ
async function* numberGenerator(limit) {
for (let i = 0; i < limit; i++) {
await new Promise(resolve => setTimeout(resolve, 100)); // Simulate async operation
yield i;
}
}
ãã®ãžã§ãã¬ãŒã¿ãŒã¯ã0ãã`limit - 1`ãŸã§ã®æ°å€ããåæ°å€ã®éã«100ããªç§ã®é å»¶ãæãã§éåæã«çæããŸãã
éåæã€ãã¬ãŒã¿ãŒ
éåæã€ãã¬ãŒã¿ãŒã¯`next()`ã¡ãœãããæã€ãªããžã§ã¯ãã§ããã®ã¡ãœããã¯`value`ãš`done`ããããã£ãæã€ãªããžã§ã¯ãã«è§£æ±ºããããããã¹ãè¿ããŸãã`value`ããããã£ã«ã¯ã·ãŒã±ã³ã¹ã®æ¬¡ã®å€ãå«ãŸãã`done`ããããã£ã¯ã€ãã¬ãŒã¿ãŒãã·ãŒã±ã³ã¹ã®çµããã«éãããã©ããã瀺ããŸãã
éåæã€ãã¬ãŒã¿ãŒã¯ã`for await...of`ã«ãŒãã䜿çšããŠæ¶è²»ã§ããŸãïŒ
async function consumeGenerator() {
for await (const number of numberGenerator(5)) {
console.log(number);
}
}
consumeGenerator(); // Output: 0, 1, 2, 3, 4 (with 100ms delay between each)
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ãšã¯ïŒ
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã¯ãããŒã¿ã¹ããªãŒã ãåŠçããéåæãžã§ãã¬ãŒã¿ãŒãšéåæã€ãã¬ãŒã¿ãŒã®é£éã§ãããã€ãã©ã€ã³ã®åã¹ããŒãžã¯ãããŒã¿ã次ã®ã¹ããŒãžã«æž¡ãåã«ãç¹å®ã®å€æããã£ã«ã¿ãªã³ã°æäœãå®è¡ããŸãã
ãã€ãã©ã€ã³ã䜿çšããäž»ãªå©ç¹ã¯ãè€éãªããŒã¿åŠçã¿ã¹ã¯ãããå°ãã管çããããåäœã«åå²ã§ããããšã§ããããã«ãããã³ãŒãã®å¯èªæ§ãä¿å®æ§ãããã³ãã¹ãæ§ãåäžããŸãã
ãã€ãã©ã€ã³ã®ã³ã¢ã³ã³ã»ãã
- ãœãŒã¹: ãã€ãã©ã€ã³ã®éå§ç¹ã§ãããéåžžã¯åæããŒã¿ã¹ããªãŒã ãçæããéåæãžã§ãã¬ãŒã¿ãŒã§ãã
- 倿: ããŒã¿ãäœããã®æ¹æ³ã§å€æããã¹ããŒãžã§ãïŒäŸïŒãããã³ã°ããã£ã«ã¿ãªã³ã°ããªãã¥ãŒã·ã³ã°ïŒããããã¯ãã°ãã°éåæãžã§ãã¬ãŒã¿ãŒãéåæã€ãã©ãã«ãè¿ã颿°ãšããŠå®è£ ãããŸãã
- ã·ã³ã¯: åŠçãããããŒã¿ãæ¶è²»ãããã€ãã©ã€ã³ã®æçµã¹ããŒãžã§ãïŒäŸïŒãã¡ã€ã«ãžã®æžã蟌ã¿ãAPIãžã®éä¿¡ãUIã§ã®è¡šç€ºïŒã
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã®æ§ç¯ïŒå®è·µçãªäŸ
ãŠã§ããµã€ãã®URLã¹ããªãŒã ãåŠçãããšããå®è·µçãªäŸã§ããã®æŠå¿µã説æããŸããããæ¬¡ã®ãããªãã€ãã©ã€ã³ãäœæããŸãïŒ
- URLã®ãªã¹ããããŠã§ããµã€ãã®ã³ã³ãã³ããååŸããã
- åãŠã§ããµã€ãããã¿ã€ãã«ãæœåºããã
- ã¿ã€ãã«ã10æåæªæºã®ãŠã§ããµã€ããé€å€ããã
- æ®ãã®ãŠã§ããµã€ãã®ã¿ã€ãã«ãšURLããã°ã«åºåããã
ã¹ããã1ïŒãœãŒã¹ - URLã®çæ
ãŸããURLã®ãªã¹ããyieldããéåæãžã§ãã¬ãŒã¿ãŒãå®çŸ©ããŸãïŒ
async function* urlGenerator(urls) {
for (const url of urls) {
yield url;
}
}
const urls = [
"https://www.example.com",
"https://www.google.com",
"https://developer.mozilla.org",
"https://nodejs.org"
];
const urlStream = urlGenerator(urls);
ã¹ããã2ïŒå€æ - ãŠã§ããµã€ãã³ã³ãã³ãã®ååŸ
次ã«ãåURLã®ã³ã³ãã³ããååŸããéåæãžã§ãã¬ãŒã¿ãŒãäœæããŸãïŒ
async function* fetchContent(urlStream) {
for await (const url of urlStream) {
try {
const response = await fetch(url);
const html = await response.text();
yield { url, html };
} catch (error) {
console.error(`Error fetching ${url}: ${error}`);
}
}
}
ã¹ããã3ïŒå€æ - ãŠã§ããµã€ãã®ã¿ã€ãã«ã®æœåº
次ã«ãHTMLã³ã³ãã³ãããã¿ã€ãã«ãæœåºããŸãïŒ
async function* extractTitle(contentStream) {
for await (const { url, html } of contentStream) {
const titleMatch = html.match(/(.*?)<\/title>/i);
const title = titleMatch ? titleMatch[1] : null;
yield { url, title };
}
}
ã¹ããã4ïŒå€æ - ã¿ã€ãã«ã®ãã£ã«ã¿ãªã³ã°
ã¿ã€ãã«ã10æåæªæºã®ãŠã§ããµã€ããé€å€ããŸãïŒ
async function* filterTitles(titleStream) {
for await (const { url, title } of titleStream) {
if (title && title.length >= 10) {
yield { url, title };
}
}
}
ã¹ããã5ïŒã·ã³ã¯ - çµæã®ãã®ã³ã°
æåŸã«ãæ®ã£ããŠã§ããµã€ãã®ã¿ã€ãã«ãšURLããã°ã«åºåããŸãïŒ
async function logResults(filteredStream) {
for await (const { url, title } of filteredStream) {
console.log(`Title: ${title}, URL: ${url}`);
}
}
å šãŠããŸãšããïŒãã€ãã©ã€ã³
ã§ã¯ãããããã¹ãŠã®ã¹ããŒãžãé£çµããŠãå®å šãªãã€ãã©ã€ã³ã圢æããŸãããïŒ
async function runPipeline() {
const contentStream = fetchContent(urlStream);
const titleStream = extractTitle(contentStream);
const filteredStream = filterTitles(titleStream);
await logResults(filteredStream);
}
runPipeline();
ãã®ã³ãŒãã¯ããŠã§ããµã€ãã®ã³ã³ãã³ããååŸããã¿ã€ãã«ãæœåºããã¿ã€ãã«ããã£ã«ã¿ãªã³ã°ããçµæããã°ã«åºåãããã€ãã©ã€ã³ãäœæããŸããéåæãžã§ãã¬ãŒã¿ãŒã®éåæçãªæ§è³ªã«ããããã€ãã©ã€ã³ã®åã¹ããŒãžã¯ãã³ããããã³ã°ã§åäœãããããã¯ãŒã¯ãªã¯ãšã¹ããä»ã®I/Oæäœã®å®äºãåŸ ã£ãŠããéãä»ã®æäœãç¶è¡ã§ããŸãã
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã䜿çšããå©ç¹
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã«ã¯ãããã€ãã®å©ç¹ããããŸãïŒ
- å¯èªæ§ãšä¿å®æ§ã®åäž: ãã€ãã©ã€ã³ã¯è€éãªã¿ã¹ã¯ãããå°ãã管çããããåäœã«åå²ãããããã³ãŒããçè§£ãããããä¿å®ãããããªããŸãã
- åå©çšæ§ã®åäž: ãã€ãã©ã€ã³ã®åã¹ããŒãžã¯ä»ã®ãã€ãã©ã€ã³ã§åå©çšã§ãããããã³ãŒãã®åå©çšãä¿é²ãããåé·æ§ãæžå°ããŸãã
- ããè¯ããšã©ãŒãã³ããªã³ã°: ãã€ãã©ã€ã³ã®åã¹ããŒãžã§ãšã©ãŒãã³ããªã³ã°ãå®è£ ã§ãããããåé¡ã®ç¹å®ãšä¿®æ£ã容æã«ãªããŸãã
- äžŠè¡æ§ã®åäž: éåæãžã§ãã¬ãŒã¿ãŒã䜿çšãããšãããŒã¿ãéåæã«åŠçã§ãããããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã
- é å»¶è©äŸ¡: éåæãžã§ãã¬ãŒã¿ãŒã¯ãå¿ èŠãªãšãã«ã®ã¿å€ãçæãããããç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã«ã¡ã¢ãªãç¯çŽããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ããã¯ãã¬ãã·ã£ãŒã®åŠç: ãã€ãã©ã€ã³ã¯ããã¯ãã¬ãã·ã£ãŒãåŠçããããã«èšèšã§ããããã¹ããŒãžãä»ã®ã¹ããŒãžãå§åããã®ãé²ããŸããããã¯ä¿¡é Œæ§ã®é«ãã¹ããªãŒã åŠçã«ãšã£ãŠéåžžã«éèŠã§ãã
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã®é«åºŠãªãã¯ããã¯
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã匷åããããã«äœ¿çšã§ããé«åºŠãªãã¯ããã¯ãããã€ã玹ä»ããŸãïŒ
ãããã¡ãªã³ã°
ãããã¡ãªã³ã°ã¯ããã€ãã©ã€ã³ã®ç°ãªãã¹ããŒãžéã®åŠçé床ã®ã°ãã€ããå¹³æ»åããã®ã«åœ¹ç«ã¡ãŸãããããã¡ã¹ããŒãžã¯ãç¹å®ã®ãããå€ã«éãããŸã§ããŒã¿ãèç©ãããã®åŸæ¬¡ã®ã¹ããŒãžã«æž¡ãããšãã§ããŸããããã¯ãããã¹ããŒãžãä»ã®ã¹ããŒãžãããå€§å¹ ã«é ãå Žåã«äŸ¿å©ã§ãã
äžŠè¡æ§å¶åŸ¡
äžŠè¡æäœã®æ°ãå¶éããããšã§ããã€ãã©ã€ã³ã®äžŠè¡ã¬ãã«ãå¶åŸ¡ã§ããŸããããã¯ããªãœãŒã¹ã®éè² è·ãé²ãã ããAPIã®ã¬ãŒãå¶éãéµå®ãããããã®ã«åœ¹ç«ã¡ãŸãã`p-limit`ã®ãããªã©ã€ãã©ãªã¯ãäžŠè¡æ§ã®ç®¡çã«åœ¹ç«ã¡ãŸãã
ãšã©ãŒãã³ããªã³ã°æŠç¥
ãã€ãã©ã€ã³ã®åã¹ããŒãžã§å ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŸãã`try...catch`ãããã¯ã䜿çšããŠäŸå€ãåŠçãããããã°ã®ããã«ãšã©ãŒããã®ã³ã°ããããšãæ€èšããŠãã ãããäžæçãªãšã©ãŒã«å¯ŸããŠãªãã©ã€ã¡ã«ããºã ãå®è£ ããããšãã§ããŸãã
ãã€ãã©ã€ã³ã®çµå
è€æ°ã®ãã€ãã©ã€ã³ãçµåããŠãããè€éãªããŒã¿åŠçã¯ãŒã¯ãããŒãäœæã§ããŸããäŸãã°ãè€æ°ã®ãœãŒã¹ããããŒã¿ãååŸãããã€ãã©ã€ã³ãšãçµåãããããŒã¿ãåŠçããå¥ã®ãã€ãã©ã€ã³ãæã€ããšãã§ããŸãã
ã¢ãã¿ãªã³ã°ãšãã®ã³ã°
ãã€ãã©ã€ã³ã®ããã©ãŒãã³ã¹ã远跡ããããã«ãã¢ãã¿ãªã³ã°ãšãã®ã³ã°ãå®è£ ããŸããããã«ãããããã«ããã¯ãç¹å®ããããã©ãŒãã³ã¹ãåäžãããããã«ãã€ãã©ã€ã³ãæé©åããããšãã§ããŸããåŠçæéããšã©ãŒçããªãœãŒã¹äœ¿çšéãªã©ã®ã¡ããªã¯ã¹ã䜿çšããããšãæ€èšããŠãã ããã
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã®ãŠãŒã¹ã±ãŒã¹
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã¯ãå¹ åºããŠãŒã¹ã±ãŒã¹ã«é©ããŠããŸãïŒ
- ããŒã¿ETLïŒæœåºã倿ãããŒãïŒ: æ§ã ãªãœãŒã¹ããããŒã¿ãæœåºããäžè²«ãã圢åŒã«å€æããããŒã¿ããŒã¹ãããŒã¿ãŠã§ã¢ããŠã¹ã«ããŒãããŸããäŸïŒç°ãªããµãŒããŒããã®ãã°ãã¡ã€ã«ãåŠçããäžå€®éæš©çãªãã®ã³ã°ã·ã¹ãã ã«ããŒãããã
- Webã¹ã¯ã¬ã€ãã³ã°: ãŠã§ããµã€ãããããŒã¿ãæœåºããæ§ã ãªç®çã§åŠçããŸããäŸïŒè€æ°ã®eã³ããŒã¹ãµã€ããã補åäŸ¡æ Œãã¹ã¯ã¬ã€ãã³ã°ããæ¯èŒããã
- ãªã¢ã«ã¿ã€ã ããŒã¿åŠç: ã»ã³ãµãŒããœãŒã·ã£ã«ã¡ãã£ã¢ãã£ãŒããéèåžå Žãªã©ã®ãœãŒã¹ããã®ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãåŠçããŸããäŸïŒTwitterãã£ãŒãããã®ã»ã³ãã¡ã³ãããªã¢ã«ã¿ã€ã ã§åæããã
- éåæAPIåŠç: éåæAPIã¬ã¹ãã³ã¹ãåŠçããããŒã¿ãå å·¥ããŸããäŸïŒè€æ°ã®APIããããŒã¿ãååŸããçµæãçµåããã
- ãã¡ã€ã«åŠç: CSVãã¡ã€ã«ãJSONãã¡ã€ã«ãªã©ã®å€§ããªãã¡ã€ã«ãéåæã«åŠçããŸããäŸïŒå€§ããªCSVãã¡ã€ã«ãè§£æããããŒã¿ãããŒã¿ããŒã¹ã«ããŒãããã
- ç»åã»åç»åŠç: ç»åãåç»ããŒã¿ãéåæã«åŠçããŸããäŸïŒãã€ãã©ã€ã³ã§ç»åããªãµã€ãºããããåç»ããã©ã³ã¹ã³ãŒãã£ã³ã°ãããããã
é©åãªããŒã«ãšã©ã€ãã©ãªã®éžæ
ãã¬ãŒã³ãªJavaScriptã䜿çšããŠéåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ãå®è£ ã§ããŸãããããã»ã¹ãç°¡çŽ åããè¿œå æ©èœãæäŸããããã€ãã®ã©ã€ãã©ãªããããŸãïŒ
- IxJS (Reactive Extensions for JavaScript): ãªãã¶ãŒããã«ã·ãŒã±ã³ã¹ã䜿çšããŠéåæããã³ã€ãã³ãããŒã¹ã®ããã°ã©ã ãæ§æããããã®ã©ã€ãã©ãªãIxJSã¯ãããŒã¿ã¹ããªãŒã ã倿ããã³ãã£ã«ã¿ãªã³ã°ããããã®è±å¯ãªãªãã¬ãŒã¿ãŒã»ãããæäŸããŸãã
- Highland.js: ããŒã¿ã¹ããªãŒã ãåŠçããããã®é¢æ°åAPIãæäŸããJavaScriptã®ã¹ããªãŒãã³ã°ã©ã€ãã©ãªã§ãã
- Kefir.js: ããŒã¿ã¹ããªãŒã ãäœæããã³æäœããããã®é¢æ°åAPIãæäŸããJavaScriptã®ãªã¢ã¯ãã£ãããã°ã©ãã³ã°ã©ã€ãã©ãªã§ãã
- Zen Observable: JavaScriptçšã®Observableææ¡ã®å®è£ ã§ãã
ã©ã€ãã©ãªãéžæããéã«ã¯ã次ã®ãããªèŠçŽ ãèæ ®ããŠãã ããïŒ
- APIã®ç¿ç床: èªåãäœ¿ãæ £ããAPIãæã€ã©ã€ãã©ãªãéžæããŸãã
- ããã©ãŒãã³ã¹: ç¹ã«å€§èŠæš¡ãªããŒã¿ã»ããã«å¯ŸããŠãã©ã€ãã©ãªã®ããã©ãŒãã³ã¹ãè©äŸ¡ããŸãã
- ã³ãã¥ããã£ãµããŒã: 匷åãªã³ãã¥ããã£ãšåªããããã¥ã¡ã³ããæã€ã©ã€ãã©ãªãéžæããŸãã
- äŸåé¢ä¿: ã©ã€ãã©ãªã®ãµã€ãºãšäŸåé¢ä¿ãèæ ®ããŸãã
ããããèœãšã穎ãšãã®åé¿æ¹æ³
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã§äœæ¥ããéã«æ³šæãã¹ããããããèœãšã穎ãããã€ã玹ä»ããŸãïŒ
- æªææã®äŸå€: ãã€ãã©ã€ã³ã®åã¹ããŒãžã§äŸå€ãé©åã«åŠçããããã«ããŠãã ãããæªææã®äŸå€ã¯ããã€ãã©ã€ã³ãéäžã§çµäºããåå ãšãªãå¯èœæ§ããããŸãã
- ãããããã¯: ãã€ãã©ã€ã³ã®ã¹ããŒãžéã§åŸªç°äŸåãäœæããªãããã«ããŠãã ãããããã¯ãããããã¯ã«ã€ãªããå¯èœæ§ããããŸãã
- ã¡ã¢ãªãªãŒã¯: äžèŠã«ãªã£ãããŒã¿ãžã®åç §ãä¿æãç¶ããããšã§ã¡ã¢ãªãªãŒã¯ãäœæããªãããã«æ³šæããŠãã ããã
- ããã¯ãã¬ãã·ã£ãŒã®åé¡: ãã€ãã©ã€ã³ã®ããã¹ããŒãžãä»ã®ã¹ããŒãžãããå€§å¹ ã«é ãå Žåãããã¯ãã¬ãã·ã£ãŒã®åé¡ãçºçããå¯èœæ§ããããŸãããããã®åé¡ã軜æžããããã«ããããã¡ãªã³ã°ãäžŠè¡æ§å¶åŸ¡ã®äœ¿çšãæ€èšããŠãã ããã
- äžé©åãªãšã©ãŒãã³ããªã³ã°: ãšã©ãŒãã³ããªã³ã°ããžãã¯ããèãããããã¹ãŠã®ãšã©ãŒã·ããªãªãæ£ããåŠçããããã«ããŠãã ãããäžååãªãšã©ãŒãã³ããªã³ã°ã¯ãããŒã¿ã®æå€±ãäºæãã¬åäœã«ã€ãªããå¯èœæ§ããããŸãã
çµè«
JavaScriptã®éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã¯ãéåæããŒã¿ã¹ããªãŒã ãåŠçããããã®åŒ·åã§æŽç·Žãããæ¹æ³ãæäŸããŸããè€éãªã¿ã¹ã¯ãããå°ããã管çããããåäœã«åå²ããããšã§ããã€ãã©ã€ã³ã¯ã³ãŒãã®å¯èªæ§ãä¿å®æ§ãåå©çšæ§ãåäžãããŸããéåæãžã§ãã¬ãŒã¿ãŒãéåæã€ãã¬ãŒã¿ãŒãããã³ãã€ãã©ã€ã³ã®æŠå¿µããã£ãããšçè§£ããããšã§ãçŸä»£ã®Webã¢ããªã±ãŒã·ã§ã³åãã«å¹ççã§ã¹ã±ãŒã©ãã«ãªããŒã¿åŠçãã§ãŒã³ãæ§ç¯ã§ããŸãã
éåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ãæ¢æ±ããéã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ãèæ ®ããããã©ãŒãã³ã¹ãæé©åããä¿¡é Œæ§ã確ä¿ããããã®é©åãªããŒã«ãšãã¯ããã¯ãéžæããããšãå¿ããªãã§ãã ãããæ éãªèšç»ãšå®è£ ã«ãããéåæãžã§ãã¬ãŒã¿ãŒãã€ãã©ã€ã³ã¯ãããªãã®éåæããã°ã©ãã³ã°ã®æŠåšåº«ã®äžã§éåžžã«äŸ¡å€ã®ããããŒã«ãšãªãåŸãŸãã
éåæã¹ããªãŒã åŠçã®åãæŽ»çšããWebéçºãããžã§ã¯ãã§æ°ããªå¯èœæ§ãåãéããŠãã ããïŒ